MLListView = Class(MLScrollView,'MLListView');



MLListView.mPullListView=nil;
MLListView.mIsPullUpdate = nil;
MLListView.mIsMoreUpdate = nil;
MLListView.mIsDelable = nil;
MLListView.viewCtrl = nil;
MLListView.id = nil;
MLListView.cellHeight = nil
MLListView.bgImage = nil;
MLListView.bgColor = nil;
MLListView.cellTemplate={};--item的模板
MLListView.headerVeiw = nil;--下拉列表的header
MLListView.footerView = nil;--下拉列表的footer
--[[
功能：初始化 列表 视图实例 
参数： number w  视图宽度
参数： number h  视图高度
参数： number cellHeight  单个列表项高度
参数： boolean isPullUpdate   是否使能上拉刷新
参数： boolean isMoreUpdate   是否使能多刷新
参数： boolean isDelable      是否使能等删除
返回： 列表 视图实例 
]]
 
function MLListView:initListView(w,h, isPullUpdate,isMoreUpdate, isDelable, viewCtrl, id)

	if w==nil then
		print('warning:MLListView:initListView, argument 1 is nil!');
		return;
	end	
	if type(w) ~= 'number'  then
		print('warning:MLListView:initListView, argument 1 type is not number!');
		return;
	end  
	if h==nil then
		print('warning:MLListView:initListView, argument 2 is nil');
		return ;
	end	  
	if type(h) ~= 'number'  then
		print('warning:MLListView:initListView, argument 2 type is not number!');
		return;
	end  	
	if type(isPullUpdate) ~= 'boolean'  then
		print('warning:MLListView:initListView, argument 4 type is not boolean!');
		return;
	end
	if type(isMoreUpdate) ~= 'boolean'  then
		print('warning:MLListView:initListView, argument 5 type is not boolean!');
		return;
	end
	if type(isDelable) ~= 'boolean'  then
		print('warning:MLListView:initListView, argument 6 type is not boolean!');
		return;
	end	
	self.viewCtrl = viewCtrl;
	self.mPullListView = self:initScrollView(w, h, false,viewCtrl,id);
	self.mlistView:setCanPullUpdate(true);--设置成可以拖拽
	self.mIsPullUpdate = false;
	self.mIsMoreUpdate = false;
	self.headerVeiw	= MLView.new():initView(w,40);
	qtEvent[self.mHashcode] = self;
	self.headerVeiw:setColor(UIColor.COLOR_WEAKBLACK);
	local strw = MLNative.measStringWidth('正在加载.....', UITheme.LABEL_FONT_HEIGHT, MLGraphics.Style_Common);
	self.headerVeiw:getGraphic():drawString('正在加载.....', self.mWidth/2-strw/2, 0, UIColor.COLOR_WHITE, UITheme.LABEL_FONT_HEIGHT, MLGraphics.Style_Common)
	
	local strfw = MLNative.measStringWidth('正在加载.....', UITheme.LABEL_FONT_HEIGHT, MLGraphics.Style_Common);
	self.footerView = MLView.new():initView(w,40);
	self.footerView:setColor(UIColor.COLOR_WEAKBLACK);
	self.footerView:getGraphic():drawString('正在加载.....', self.mWidth/2-strfw/2, 0, UIColor.COLOR_WHITE, UITheme.LABEL_FONT_HEIGHT, MLGraphics.Style_Common)
	return self;
end

--[[
功能   ： 刷新列表  
参数   ： 无
返回   ： 无  
]]   
function MLListView:update()
	--self.mPullListView:pullListUpdate(); 	
	self:updateListVeiw(self.mHashcode,false,false);	
end
 
 --[[
功能   ： 停止上拉刷新  
参数   ： 无
返回   ： 无  
]]   
function MLListView:stopPullRefresh()
	self.mIsPullUpdate = false;
	--self:updateListVeiw(false,false);
end


--[[
功能   ： 停止获取更多  
参数   ： 无
返回   ： 无  
]]   
function MLListView:stopMoreRefresh()
	self.mIsMoreUpdate = false;
	--self.mPullListView:stopMoreRefresh(); 

end

--[[
功能：得到总个数 事件监听函数
参数： 无
返回： list个数
注解： 上层可重写此函数，来监听此事件
]]
function MLListView:onGetNum()

end

--[[
功能：  获取 list 项模版 事件监听函数
参数： 无
返回： json数据模版
注解： 上层可重写此函数，来监听此事件
]]
function MLListView:onCellTemplate()

end

--[[
功能： 获取cell数据 事件监听函数
参数： index  列表索引
返回： json数据
注解： 上层可重写此函数，来监听此事件
]]
function MLListView:onCellData(index)
end


--[[
功能： 上拉刷新 事件监听函数
参数： 无
返回： 无
注解： 上层可重写此函数，来监听此事件
]]
function MLListView:onPullRefresh()
end

 --[[
功能： 获取更多 事件监听函数
参数： 无
返回： 无
注解： 上层可重写此函数，来监听此事件
]]
function MLListView:onMoreRefresh()
end

--[[
功能： 某项被删除 事件监听函数
参数：index   索引
返回： 无
注解： 上层要根据索引删除数据库对应的数据
        上层可重写此函数，来监听此事件
]]
function MLListView:onDelItem(index)
end

--[[
功能： 选中某项 事件监听函数
参数：index   索引
参数：tag 某项具体控件的tg
返回： 无
注解： 上层可重写此函数，来监听此事件
]]
function MLListView:onCellSel(index,tag)
end


function MLListView:onCallBack(resultCode,arg) 
    --[[if resultCode == 0 then 
	    	 if self~=nil then 
			if self.onGetNum~=nil then 
				return self.onGetNum();
			end
		end 
	    elseif  resultCode == 1 then
	    	 if self~=nil then
			if self.onCellData~=nil then
				return self.onCellData(arg[1]);
			end
		end
	    elseif  resultCode == 2 then
	    		if self~=nil then
			if self.onCellTemplate~=nil then
				return self.onCellTemplate(arg[1]);
			end
		end
	    elseif  resultCode == 3 then
	    	if self~=nil then
			if self.onCellSel~=nil then
				return self.onCellSel(arg[1],arg[2]);
			end
		end

	    elseif  resultCode == 4 then
	    	if self~=nil then
			if self.onDelItem~=nil then		
				return self.onDelItem(arg[1]);
			end
		end 
	    elseif  resultCode == 5 then
	    	if self~=nil then 
			if self.onPullRefresh~=nil then 
				return self.onPullRefresh();
			end 
		end
	    elseif  resultCode == 6 then
	    	if self~=nil then
			if self.onMoreRefresh~=nil then
				return self.onMoreRefresh();
			end
		end 
    end]]
end

--暫且實現一個模板，多個條目
function qt_event_showEvent(hashcode)
	qtEvent[hashcode]:updateListVeiw(hashcode,false,false);
end

function MLListView:updateListVeiw(hashcode,hasheader,hasfooter)
	if qtEvent[hashcode]~=nil then
		qtEvent[hashcode]:delAll();
		if(hasheader) then
			qtEvent[hashcode]:add(qtEvent[hashcode].headerVeiw);
		end		
		
		local tmpJson = qtEvent[hashcode].onCellTemplate();
		local rootTable = MLNative.json(tmpJson);
		local cellTemplate = nil;
		local itemCount = qtEvent[hashcode].onGetNum();
		for i=1,itemCount do			
			local dataTable = MLNative.json(qtEvent[hashcode].onCellData(itemCount-i));
			for k,v in ipairs(rootTable.items) do
				if v.id == dataTable.id then
					cellTemplate = v;					
					local cellView = MLListCellView.new():init(qtEvent[hashcode].mWidth,qtEvent[hashcode].viewCtrl,cellTemplate,dataTable);
	    			qtEvent[hashcode]:add(cellView);
				end
			end
		end
		if hasfooter then
			qtEvent[hashcode]:add(qtEvent[hashcode].footerView);
		end
	end	
end

function qt_event_pulldownEvent(hashcode)
	if qtEvent[hashcode]~=nil then
		if not qtEvent[hashcode].mIsPullUpdate then
			qtEvent[hashcode].mIsPullUpdate = true;
			qtEvent[hashcode]:updateListVeiw(hashcode,true,false);
		end		
	end
end
function qt_event_pullupEvent( hashcode)	
	if not qtEvent[hashcode].mIsMoreUpdate then
		 qtEvent[hashcode].mIsMoreUpdate = true;
		 qtEvent[hashcode].onMoreRefresh();
	end	
end

function qt_event_pullRelease()

end